//package com.zy.oauth.shiro;
//
//import java.util.Date;
//
//public class TokenUtils {
//    private TokenUtils() {
//    }
//
//    /**
//     * @param username username
//     * @param role     user role
//     * @return The encrypted token
//     */
//    public static String createToken(String username, int role) {
//        Date date = new Date(System.currentTimeMillis() + Constant.TOKEN_EXPIRE_TIME);
//        Algorithm algorithm = Algorithm.HMAC256(username);
//        return JWT.create()
//                .withClaim(Constant.USER_NAME, username)
//                .withClaim(Constant.USER_ROLE, role)
//                .withExpiresAt(date)
//                .sign(algorithm);
//    }
//
//    /**
//     * @param username username
//     * @param role     user role
//     * @return The encrypted token
//     */
//    public static String refreshToken(String username, int role) {
//        return createToken(username, role);
//    }
//
//    /**
//     * refresh token and add to header
//     */
//    public static void refreshToken() {
//        TupleNameRole tupleNameRole = ServletUtils.userNameRoleFrom.get();
//        ServletUtils.addHeader.accept(
//                Constant.TOKEN,
//                createToken(tupleNameRole.getUsername(), tupleNameRole.getUserRole())
//        );
//    }
//
//    /**
//     * verify token
//     *
//     * @param token jwtToken
//     */
//    public static void verify(String token) {
//        try {
//            TupleNameRole tupleNameRole = tokenDecode(token);
//            Algorithm algorithm = Algorithm.HMAC256(tupleNameRole.getUsername());
//            JWTVerifier verifier = JWT.require(algorithm)
//                    .withClaim(Constant.USER_NAME, tupleNameRole.getUsername())
//                    .withClaim(Constant.USER_ROLE, tupleNameRole.getUserRole())
//                    .build();
//            verifier.verify(token);
//        } catch (JWTVerificationException e) {
//            serviceLog.error("token verify fail.", e);
//            throw e;
//        }
//    }
//
//    /**
//     * @param token token
//     * @return user name and role
//     */
//    public static TupleNameRole tokenDecode(String token) {
//        try {
//            DecodedJWT jwt = JWT.decode(token);
//            return new TupleNameRole(
//                    jwt.getClaim(Constant.USER_NAME).asString(),
//                    jwt.getClaim(Constant.USER_ROLE).asInt()
//            );
//        } catch (JWTDecodeException e) {
//            serviceLog.error("Token decode happen exception.", e);
//            throw e;
//        }
//    }
//
//}
